package com.cskaoyan._14network._02udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @author Macro_Ray
 * @since 2024/3/25 21:04
 */
//UDP接收数据
public class ReveiveMessageDemo {
    public static void main(String[] args) throws IOException {

        // 1.创建DatagramSocket对象
        // 一定要绑定端口，而且绑定的端口要和发送的一样
        DatagramSocket ds = new DatagramSocket(10086);
        // 2.接收数据
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

        // 阻塞式接收数据
        // 程序在执行到这里是会阻塞的，直到接收到数据才会继续执行
        ds.receive(dp);

        // 3.解析数据包
        byte[] data = dp.getData();   // 接收到的数据
        int len = dp.getLength();   // 数据长度
        InetAddress address = dp.getAddress();  // 发送方的IP地址
        int port = dp.getPort();  // 发送方的端口号

        System.out.println("接收到数据：" + new String(data, 0, len));
        System.out.println("该数据是从" + address + "的" + port + "端口发送过来的");

        // 4.释放资源
        ds.close();
    }
}
